package com.csce.domain.entity.score.socket;

import com.doudou.core.container.SetUtil;
import lombok.Data;

import java.io.Serializable;
import java.util.LinkedHashSet;

/**
 * 候考厅考站对象
 */
@Data
public class PlaceWaitingVo implements Serializable {
    /**
     * 考场编排房间id
     */
    private String exPlaceId;
    /**
     * 实际考场id
     */
    private Long placeId;
    /**
     * 考场名称
     */
    private String placeName;
    /**
     * 下标
     */
    private Integer index;
    /**
     * 排队人数
     */
    private Integer waitNum;
    /**
     * 是否可以展示姓名
     */
    private Boolean nameShow;
    /**
     * 该考站排队的学员 [Q1、Q2]
     */
    private LinkedHashSet<String> stus = new LinkedHashSet<>();

    public PlaceWaitingVo(String exPlaceId, Long placeId, String placeName, Integer index, Integer waitNum) {
        this.exPlaceId = exPlaceId;
        this.placeId = placeId;
        this.placeName = placeName;
        this.index = index;
        this.waitNum = waitNum;
    }


    /**
     * 头删
     */
    public void stuRemoveFirst() {
        this.stuRemove(this.getStuFirst());
    }

    /**
     * 获取第一个
     */
    public String getStuFirst() {
        return SetUtil.getFirst(this.stus);
    }

    /**
     * 删除一个元素
     */
    public void stuRemove(String code) {
        this.stus.remove(code);
    }

    public int stuSize() {
        return this.stus.size();
    }

    /**
     * 房间模型预留一个空位做开始使用
     */
    public void addStuEmpty() {
        this.stus.add("#0");
    }

    public boolean addStu(String code) {
        //如果开头是空位置，排站位置多一位
        if (stus.size() < ("#0".equals(getStuFirst()) ? waitNum + 1 : waitNum)) {
            stus.add(code);
            return true;
        }
        return false;
    }
}